@tool
extends Control

signal remove_attribute(attribute:Attribute)

@export var attribute:Attribute:
	set(value):
		update_ui(value)
		attribute = value

var attribute_dictionary:Array[AttributeDictionaryItem]:
	set(value):
		attribute_dictionary = value
		set_options(value)

var updating_ui:bool = false

func update_ui(attribute:Attribute):
	updating_ui = true
	%BaseValue.value = attribute.base_value
	%CurrentValue.value = attribute.current_value
	%MinValue.value = attribute.min_value
	%MaxValue.value = attribute.max_value
	updating_ui = false

# attribute_dictionary 被设置时添加item，同时若存在attribute则改变默认选项
func set_options(options:Array[AttributeDictionaryItem]):
	for attr in options:
		%AttributeOptions.add_item(attr.name)
		if attribute.attribute_name:
			if attr.name == attribute.attribute_name:
				%AttributeOptions.select(attribute_dictionary.find(attr))
		elif %AttributeOptions.selected == 0:
			%AttributeOptions.select(-1)


func _on_attribute_name_item_selected(index: int) -> void:
	attribute.attribute_name = attribute_dictionary[index].name


func _on_base_value_value_changed(value: float) -> void:
	# 若base_value 将要设置的值大于attribute默认的max_value,则先设置max_value的值
	if value > attribute.max_value:
		attribute.max_value = value
	if value < attribute.min_value:
		printerr("不允许设置比min_value更小的基础值")
	attribute.base_value = value
	update_ui(attribute)


func _on_current_value_value_changed(value: float) -> void:
	attribute.current_value = value
	update_ui(attribute)


func _on_remove_pressed() -> void:
	remove_attribute.emit(attribute)
